;(function($){
/**
 * jqGrid extension for manipulating columns properties
 * Piotr Roznicki roznicki@o2.pl
 * http://www.roznicki.prv.pl
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
$.jgrid.extend({
	setColumnstotal : function(p) {
		p = $.extend({
			top : -15,
			left: 300,
			width: 700,
			min_width:400,
			height: 600,
			dataheight: 600,
			modal: false,
			drag: true,
			caption:"分组统计图表",
			beforeShowForm: null,
			afterShowForm: null,
			afterSubmitForm: null,
			closeOnEscape : true,
			ShrinkToFit : false,
			jqModal : false,
			saveicon: [true,"left","ui-icon-disk"],
			closeicon: [true,"left","ui-icon-close"],
			onClose : function(){
				var $t = this;
				$("#"+$t.p.id).jqGrid('groupingRemove',true);
			},
			colnameview : true,
			closeAfterSubmit : true,
			updateAfterCheck : false,
			recreateForm : false
		}, $.jgrid.col, p ||{});
		
		return this.each(function(){
			var $t = this;
			if (!$t.grid ) { return; }
			var onBeforeShow = typeof p.beforeShowForm === 'function' ? true: false;
			var onAfterShow = typeof p.afterShowForm === 'function' ? true: false;
			var onAfterSubmit = typeof p.afterSubmitForm === 'function' ? true: false;	
			var gID = $t.p.id,
			dtbl = "TOTalTbl_"+gID,
			IDs = {themodal:'colmod'+gID,groupID:'colhd'+gID,groupbyID:'groupby'+gID,staticID:'colcnt'+gID,echartID:'echart'+gID, echartDivID:'echartDiv'+gID,echartTableID:'echartTable'+gID,scrollelm: dtbl};
//			if(p.recreateForm===true && $("#"+IDs.themodal).html() != null) {
			if(p.recreateForm===false && $("#"+IDs.themodal).html() != null) { //判断是否打开过分组统计，如果打开需要清空 重新添加统计数据
				$("#"+IDs.themodal).remove();
			}
			if ( $("#"+IDs.themodal).html() != null ) {
				if(onBeforeShow) { p.beforeShowForm($("#"+dtbl)); }
				$.jgrid.viewModal("#"+IDs.themodal,{gbox:"#gbox_"+gID,jqm:p.jqModal, jqM:false, modal:p.modal});
				if(onAfterShow) { p.afterShowForm($("#"+dtbl)); }
			} else {
				var dh = isNaN(p.dataheight) ? p.dataheight : p.dataheight+"px";
				var formdata = "<div id='"+dtbl+"' class='row  formdata' style='width:100%;overflow:auto;position:relative;height:"+dh+";margin-left: 0px;'>";
				formdata += "<div class='col-md-4' style='padding-left: 0px;width:100%;padding-right: 0px;'><div style='float:left;width:32%;margin-left:1%'><b>统计分组:</b><select id='"+ IDs.groupID+"' class='form-control' style='margin-bottom:10px'>";
				for(i=0;i<this.p.colNames.length;i++){ //获取所有有code值的属性
					var colom=this.p.colModel[i] ;
					var code =colom.code;
					if(code){
						formdata += "<option value="+ code+"#"+colom.name +" >"+ colom.label +"</option> " ;
					}
				}
			   formdata += "<option value='clear'>移除分组</option> </select></div><div style='float:left;width:32%;margin-left:1%'><b>统计指标:</b><select id='"+ IDs.groupbyID+"' class='form-control' style='margin-bottom:10px'>";
				for(i=0;i<this.p.colNames.length;i++){
						var colom=this.p.colModel[i] ;
						var code =colom.code;
						if(code){
							formdata += "<option value="+ code+"#"+colom.name +" >"+ colom.label +"</option> " ;
						}
				}
//				formdata += " <option value='clear'>移除指标</option> </select><b>统计参数:</b><select id='"+ IDs.staticID+"' class='form-control'>"
				formdata += "</select></div><div style='float:left;width:32%;margin-left:1%'><b>统计参数:</b><select id='"+ IDs.staticID+"' class='form-control' style='margin-bottom:10px'>"
					for(i=0;i<this.p.colNames.length;i++){
						var colom=this.p.colModel[i] ;
						var summaryType =colom.summaryType;   //获得统计方式
						if(summaryType){
							if(summaryType=='count'){
								formdata += "<option value='count' selected='selected'>总数目</option> " ;
							} else {
								formdata += "<option value='"+colom.name+"'>"+colom.label+"</option> " ;
							}
//							formdata += "<option value='count' selected='selected'>"+ label +"</option> " ;
						}
					}
				formdata += " </select></div></div><div class='col-md-8' id='"+ IDs.echartID+"'>" +
						"<div id='"+IDs.echartDivID+"'></div><div id='"+IDs.echartTableID+"' style='margin-top:10px'></div></div></div>";
				p.gbox = "#gbox_"+gID;
				$.jgrid.createModal(IDs,formdata,p,"#gview_"+$t.p.id,$("#gview_"+$t.p.id)[0]);
				if(!p.updateAfterCheck) {} else {}
				$("#"+IDs.groupID).change(function(e){  //统计分组的change事件
					
					var vl = $(this).val();  //获取当前选中的option中的value值   形如： 2019#property
					if(vl) {
						if(vl === "clear") {  //移除分组
//							$("#"+gID).jqGrid('groupingRemove',true);
							$('#'+IDs.echartDivID).html(""); //清楚统计图信息
							$('#'+IDs.echartTableID).html(""); //清楚统计表信息
							checkSeclect(IDs.groupbyID,IDs.staticID,true);  //禁用下拉框
						} else {
//							$("#"+gID).jqGrid('groupingGroupBy',(vl.split('#'))[1]); //将分组的属性传入 进行重新分组   eg： property
							ajaxJson(IDs.groupID,IDs.groupbyID,IDs.staticID,$t.p.postData,$t.p.url,IDs.echartDivID,IDs.echartTableID); //请求统计数据
							checkSeclect(IDs.groupbyID,IDs.staticID,false);  //恢复下拉框
						}
					}
				});
				
				$("#"+IDs.groupbyID).change(function(e){  //统计指标的change事件
					ajaxJson(IDs.groupID,IDs.groupbyID,IDs.staticID,$t.p.postData,$t.p.url,IDs.echartDivID,IDs.echartTableID); //请求统计数据
				});
				
				$("#"+IDs.staticID).change(function(e){  //统计参数的change事件
					ajaxJson(IDs.groupID,IDs.groupbyID,IDs.staticID,$t.p.postData,$t.p.url,IDs.echartDivID,IDs.echartTableID); //请求统计数据
				});			
				if(onBeforeShow) { p.beforeShowForm($("#"+dtbl)); }
				$.jgrid.viewModal("#"+IDs.themodal,{gbox:"#gbox_"+gID,jqm:p.jqModal, jqM: true, modal:p.modal});
				if(onAfterShow) { p.afterShowForm($("#"+dtbl)); }
				//设置显示echarts容器的高度
				var height = (p.height-$('#undefined').outerHeight(true)-$('.col-md-4').outerHeight(true)-20)+"px";
				var eheight = (p.height-$('#undefined').outerHeight(true)-$('.col-md-4').outerHeight(true)-20)*0.5+"px";
//				var height = "250px";
				$('#'+IDs.echartID).attr('style',"height:"+height+";width:100%;background:#013785;border-radius:5px");
				$('#'+IDs.echartDivID).attr('style',"height:"+eheight);
				ajaxJson(IDs.groupID,IDs.groupbyID,IDs.staticID,$t.p.postData,$t.p.url,IDs.echartDivID,IDs.echartTableID); //初始化请求统计数据
				$('#'+IDs.themodal).resize(function(){
					var height = ($('#'+IDs.themodal).outerHeight(true)-$('#undefined').outerHeight(true)-$('.col-md-4').outerHeight(true)-20)+"px";
					$('#'+IDs.echartID).height(height);
//					var myChart = echarts.init(document.getElementById(IDs.echartDivID));
//					 myChart.resize();
					setTimeout("$('#"+IDs.staticID+"').trigger('change')",100);
				})
			}
		});
	}
});
})(jQuery);

/*
 * groups 待处理数据
 * type  统计指标
 */
function interpretingData($t,groups,cp,type){
	 var categories = [];
	 var datas = [];
	for(i=0;i<groups.length;i++){
		console.log(groups[i]);
		for(j=0;j<groups[i].summary.length;j++){
			if (groups[i].summary[j].nm==type) {
				var gv = $t.formatter("dd", groups[i].summary[j].groupValue, cp[i] );
				categories.push(gv); //获得类型值
				datas.push(groups[i].summary[j].v); //获得类型对应的值（数量、长度、面积...）
			}
		}
	}
	return { category: categories, data: datas };
}

/**
 * 
 * @param groupID 统计分组下拉框ID
 * @param groupbyID  统计指标下拉框ID
 * @param staticID 统计参数下拉框ID
 * @param pdata jqgrid参数集合
 * @param url   请求数据地址
 * @param divId  同行加载容器id
 */
function ajaxJson(groupID,groupbyID,staticID,pdata,url,divId,tableId){ // 获取统计条件 从后台获取数据
	var groupingGroup = $("#"+groupID).val();  //统计分组值  
	var groupingGroupBy = $("#"+groupbyID).val();  //统计指标值
	var statistic = $('#'+staticID).val();  //统计参数值
//	var pdata=	$t.p.postData;  //jqgrid参数数组 包含搜索中的条件   将需要传入到服务端请求的参数添加在数组中
	pdata["f"] = "group";
	if(groupingGroup) {
		if(groupingGroup === "clear") {  //移除所有的分组信息
			pdata["groupingGroupBy"] = "";
			pdata["groupingGroup"] ="";
			pdata["statistic"] ="";
		} else {
			pdata["groupingGroupBy"] = groupingGroupBy;
			pdata["groupingGroup"] =groupingGroup
			pdata["statistic"] =statistic;
			if (url.indexOf("?")==-1) {
				url+='?echart=true';
			}else {
				url+='&echart=true';
			}
			$.ajax(
					{ 	  url : url, 
						  type : 'post',
						  data : pdata,
						  dataType : 'json',
						  success : function(result){
							  console.log(result);
							  var echartsData = ECharts.ChartDataFormate.FormateData(result[0]);
							  var echartsBarData = ECharts.ChartDataFormate.FormateGroupData(result[1],'bar',true);
							  if (typeof(groupingGroupBy)=="undefined"||groupingGroup==groupingGroupBy) { //当只有一个分组统计的时候
								  loadEcharts(echartsData.category,echartsData.data,divId);  //加载统计图形信息
								  $('#'+tableId).html("");
								  dataView(echartsData.category,'',echartsData.data,tableId,'',$('#'+staticID).find('option:selected').text(),statistic); //加载统计表数据
							 }else{ //两组统计
								 loadStockEcharts(echartsBarData.category,echartsBarData.xAxis,echartsBarData.series,divId); //加载统计图形信息
								 $('#'+tableId).html("");
								 var tableData = ECharts.ChartDataFormate.GetYAndGroupData(result[1]);
								 dataView(tableData.category,tableData.xAxis,tableData.result,tableId,'more','',statistic);
							 }
							  $('#'+divId).css({"background-color":"rgba(255,255,255,0.1)","margin-top":"10px","border-radius":"10px"});  //设置样式  
						 } 
						});
		}
	}
	
}


/*
 * category 柱状图的x轴数据  类似 data : ['Cosco','CMA','APL','OOCL','Wanhai','Zim']
 * data  柱状图中的数据 类似 data:[260, 200, 220, 120, 100, 80]
 * divId 显示echarts容器Id
 */
function loadEcharts(category,data,divId){
	var myechart = echarts.init(document.getElementById(divId));
	var colors=['#E54912','#497B36','#42BABC','#DD7C6A','#F4BE29','#BCBE48','#B5DBBA','#ABB7D0','#8595CA','#D7A2C6'];
	var option = {
			color:colors,
		    calculable : true,
		    grid: {
		    	x:'10%',
	            y:10,
	            x2:'10%',
	            y2:'10%'
//		            containLabel: true
	        },
		    xAxis : [
		        {
		            type : 'category',
		            data : category,
		            splitLine:{  
		            	show:true  
                    }, 
		            axisLabel: { //修改x轴上字体的颜色和样式
		                interval:0 ,  
		                show: true,
                        textStyle: {
                            color: '#fff'
                        }
		            },
		            axisLine:{ //修改x轴的颜色
		                lineStyle:{
		                    color:'#fff',
		                    width:0.1,//这里是为了突出显示加上的，可以去掉
		                }
		            },
		            axisTick:{  // 设置坐标轴小标记   不显示
		            	show:false
		            }
		        }
		    ],
		    yAxis : [
		        {
		            type : 'value',
//		            boundaryGap: [0, 0.1],
		            splitLine:{  
		            	show:true  
                    }, 
                    axisLabel: {
		                interval:0 ,  
		                show: true,
                        textStyle: {
                            color: '#fff'
                        }
		            },
		            axisLine:{ //修改y轴的颜色
		                lineStyle:{
		                    color:'#fff',
		                    width:0.1,//这里是为了突出显示加上的，可以去掉
		                }
		            },
		            axisTick:{
		            	show:false
		            }
		        }
		    ],
		    series : [
		        {
		            name:'',
		            type:'bar',
		            stack: 'sum',
		            barCategoryGap: '50%',
		            barWidth:30,
		            itemStyle:{ 
	                    normal:{ 
	                    	  color: function(params) {
	                              var colorList = ['#FFFB99','#FFF578','#D1EB74','#7EDD7C','#32C98F','#26B3A3','#2A9BBD','#4878DF'];
	                              return colorList[params.dataIndex]
	                          },
	                        label:{
	                           show: true, 
	                           formatter: '{c}',
	                           position: 'top',
	                           textStyle: {
	                               color: 'white'
	                           }
	                        }, 
	                        labelLine :{show:false},
	                    } 
	                },
		            data:data,
		            markLine : {
	                data : [
	                    {type : 'average', name: '平均值'}
	                ]
	            },
		        }
		       
		    ]
	};
	myechart.clear(); //清除统计图内容
	myechart.setOption(option);
}

function loadStockEcharts(xAxis,legend,data,divId){
	var myechart = echarts.init(document.getElementById(divId));
	var colors=['#42BABC','#DD7C6A','#D1EB74','#7EDD7C','#32C98F','#26B3A3','#2A9BBD','#4878DF'];
	var option = {
		    tooltip : {
		        trigger: 'axis',
		        axisPointer : {            // 坐标轴指示器，坐标轴触发有效
		            type : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'
		        }
		    },
		    color:colors,
		    grid: {
	            x:'15%',
	            y:30,
	            x2:'15%',
	            y2:'10%'
//		            containLabel: true
	        },
		    legend: {
		        data:legend,
//		        orient: 'vertical',
				x: 'center',
				y:'top',
//				padding:-5
               textStyle: {
	              color: 'white'
	             }
		    },
		    calculable : true,
		    xAxis : [
		        {
		            type : 'category',
		            data : xAxis,
		            splitLine:{  
		            	show:true  
                    }, 
		            axisLabel: { //修改x轴上字体的颜色和样式
		                interval:0 ,  
		                show: true,
                        textStyle: {
                            color: '#fff'
                        }
		            },
		            axisLine:{ //修改x轴的颜色
		                lineStyle:{
		                    color:'#fff',
		                    width:0.1,//这里是为了突出显示加上的，可以去掉
		                }
		            },
		            axisTick:{  // 设置坐标轴小标记   不显示
		            	show:false
		            }
		        }
		    ],
		    yAxis : [
		        {
		            type : 'value',
		            splitLine:{  
		            	show:true  
                    }, 
                    axisLabel: {
		                interval:0 ,  
		                show: true,
                        textStyle: {
                            color: '#fff'
                        }
		            },
		            axisLine:{ //修改y轴的颜色
		                lineStyle:{
		                    color:'#fff',
		                    width:0.1,//这里是为了突出显示加上的，可以去掉
		                }
		            },
		            axisTick:{
		            	show:false
		            }
		        }
		    ],
		    series :data
		};
	myechart.clear(); //清除统计图内容
	myechart.setOption(option);
}
/**
 * 
 * @param groupbyID   统计指标下拉框id 
 * @param staticID	  统计参数下拉框id 
 * @param flag		  恢复/禁用标识
 */
function checkSeclect(groupbyID,staticID,flag){
	if (flag) {
		$('#'+groupbyID).attr("disabled","disabled"); //禁用统计指标下拉框
		$('#'+staticID).attr("disabled","disabled");  //禁用统计参数下拉框
	}else{
		$('#'+groupbyID).removeAttr("disabled","disabled"); //恢复统计指标下拉框
		$('#'+staticID).removeAttr("disabled","disabled");  //恢复统计参数下拉框
	}
}

